package main

import "fmt"

//1、使用range遍历key，或者遍历key，value对
//2、不保证遍历顺序，如需顺序，需手动对key排序（手动将key放到slice里面，再排序）
//3、map使用哈希表，必须可以比较相等
//4、除了slice,map,function的内建类型都可以作为key
//5、Struct类型不包含上述字段，也可作为key
func main() {

	m := map[string]string{
		"name":    "ccmouse",
		"course":  "golang",
		"site":    "beijing",
		"quality": "notbad",
	}

	//m2 == empty map
	m2 := make(map[string]int)

	//m3 == nil
	var m3 map[string]int

	fmt.Println(m, m2, m3)

	fmt.Println("Traversing map")

	for k, v := range m {
		fmt.Println(k, v)
	}

	fmt.Println("Getting values")

	courseName, ok := m["course"]
	fmt.Println(courseName, ok)

	if couseName, ok := m["couse"]; !ok {
		fmt.Println("key does not exist")
	} else {
		fmt.Println(couseName)
	}

	fmt.Println("Deleting values")
	name, ok := m["name"]
	fmt.Println(name, ok)
	delete(m, "name")

	name, ok = m["name"]
	fmt.Println(name, ok)

}
